// 数组转树
export const tranListToTreeData = (list: Array<any>, parentId = 0) => {
    // 先找到所有的根节点
    try {
        let tranList = list.filter((item) => parseInt(item.parentId) === parentId)
        tranList.forEach((item) => {
            //传入id  list进行递归 在筛选出 他的父级 是一个数组
            item.children = tranListToTreeData(list, parseInt(item.id))
        })
        return tranList
    } catch (error) {
        throw new Error(error as any)
    }
}

/**
 * @description 数组扁平化
 * @param arr 数组
 * @param field 需要扁平的字段
 * @returns 扁平后的结果
 */
 export const arrayFlat = (arr: any[], field: string = 'children'): any[] => {
    return arr.reduce((result, item) => {
        if (Array.isArray(item[field]) && item[field].length > 0) {
            result.push(item)
        }
        return result.concat(Array.isArray(item[field]) && item[field].length > 0 ? arrayFlat(item[field]) : item)
    }, [])
}

/**
 * @description 替换key（深度替换）
 * @param data 数据
 * @param obj 替换的键
 * @param isDelOtherKey // 是否删除原key
 * @returns
 */
export const deepReplaceKey = (data: any[], obj: any, isDelOtherKey: boolean = true): any => {
    return data?.map((item) => {
        let copyItem: any = { ...item }
        if (isDelOtherKey) copyItem = {}
        for (const key in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, key)) {
                copyItem[obj[key]] = item[key]
            }
        }
        if (item?.children?.length) {
            copyItem.children = deepReplaceKey(item.children, obj)
        }

        return copyItem
    })
}
